#ifndef SHAREMEM_H
#define SHAREMEM_H

#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <stdint.h>
#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SHM_SIZE (512 * 1024)  // 512KB 共享内存大小
#define SHM_STRING_TTL_DEFAULT 60  // 默认过期时间（秒）
#define SHM_MAX_DATA_SIZE (SHM_SIZE - sizeof(size_t) - sizeof(time_t) - sizeof(uint32_t))

// 共享内存结构体，支持简单的string类型操作，并增加过期时间
typedef struct {
    size_t data_len;
    time_t expire_at; // 过期时间的时间戳（0表示不过期）
    uint32_t checksum; // 数据校验和
    char data[SHM_MAX_DATA_SIZE];
} shm_string;

// 函数声明
shm_string* shm_string_attach(key_t key, int *shmid_out);
void shm_string_detach(shm_string *shm);
void shm_string_remove(int shmid);
int shm_string_set_ttl(key_t key, const char *str, time_t ttl_sec);
int shm_string_set(key_t key, const char *str);
size_t shm_string_get(key_t key, char *buf, size_t bufsize);
time_t shm_string_ttl(key_t key);

// 大数据处理函数
int shm_string_set_binary(key_t key, const void *data, size_t data_len, time_t ttl_sec);
size_t shm_string_get_binary(key_t key, void *buf, size_t bufsize);
uint32_t shm_calculate_checksum(const void *data, size_t len);
int shm_verify_checksum(const shm_string *shm);
size_t shm_get_available_size(key_t key);

#endif // SHAREMEM_H
